//public--属性的简写形式
// class People {
//   // name: string;
//   // age: number;
//   // constructor(a: string, b: number) {
//   //   this.name = a;
//   //   this.age = b;
//   // }
//   constructor(public name: string, public age: number) {} //属性的简写形式
//   speak() {
//     console.log(`我的名字${this.name},今年${this.age}`);
//   }
// }

// const pe = new People("李四", 30);
// console.log(pe);
// pe.speak();

// //protected
// class People {
//   constructor(protected name: string, protected age: number) {} //属性的简写形式，必须需要有修饰符，比如public
//   protected getDetails() {
//     return `我的名字${this.name},今年${this.age}`;
//   }
//   introduce() {
//     console.log(this.getDetails());
//   }
// }

// //protected
// const pe = new People("李四", 30);
// console.log(pe);
// console.log(pe.name); //报错--protected受保护属性，可以被：类内部，子类访问，不能被外部访问
// console.log(pe.age); //报错
// console.log(pe.getDetails()); //报错
// pe.introduce(); //默认没写public都可以访问

// class Stu extends People {
//   study() {
//     console.log(this.getDetails());
//     console.log(`${this.name}正在学习`);
//   }
// }

// const stu = new Stu("李梅", 23);
// stu.study();

//private 类内部访问
// class People {
//   constructor(
//     public name: string,
//     public age: number,
//     private IDcard: string
//   ) {}
//   private getPrivateInfo() {
//     return `身份证号为：${this.IDcard}`;
//   }
//   getInfo() {
//     return `我的名字${this.name},今年${this.age}`;
//   }
//   getFullInfo() {
//     return `${this.getInfo()},${this.getPrivateInfo()}`;
//   }
// }

// const pe = new People("张三", 20, "123456789");
// pe.name;
// pe.age;
// pe.IDcard; //报错--private属性，只能类内部访问
// console.log(pe.getInfo());
// console.log(pe.getFullInfo());
// console.log(pe.getPrivateInfo()); //报错--private属性，只能类内部访问

//readonly只读
class People {
  constructor(public readonly name: string, public age: number) {}
}
const pe = new People("张三", 20);
pe.name = "mr wang"; //readonly只读，报错
pe.age = 18;
console.log(pe);
